def is_informational(code):
    return 100 <= code <= 199


def is_success(code):
    return 200 <= code <= 299


def is_redirect(code):
    return 300 <= code <= 399


def is_client_error(code):
    return 400 <= code <= 499


def is_server_error(code):
    return 500 <= code <= 599

# 以下辅助函数可用于标识响应代码的类别。
'''
is_informational()  # 1xx
is_success()  # 2xx
is_redirect()  # 3xx
is_client_error()  # 4xx
is_server_error()  # 5xx
'''

# 信息-1xx
HTTP_100_CONTINUE = 100  # 继续
HTTP_101_SWITCHING_PROTOCOLS = 101  # 交换协议
# 成功-2xx
HTTP_200_OK = 200  # 请求成功OK
HTTP_201_CREATED = 201  # 请求已完成，并导致创建新资源
HTTP_202_ACCEPTED = 202  # 请求已被接受处理，但处理尚未完成
HTTP_203_NON_AUTHORITATIVE_INFORMATION = 203  # 非权威信息
HTTP_204_NO_CONTENT = 204  # 无内容
HTTP_205_RESET_CONTENT = 205  # 重置内容
HTTP_206_PARTIAL_CONTENT = 206  # 服务器已完成对资源的部分GET请求。部分内容
HTTP_207_MULTI_STATUS = 207  # 多状态；由WebDAV(RFC 2518)扩展的状态码，代表之后的消息体将是一个XML消息，并且可能依照之前子请求数量的不同，包含一系列独立的响应代码。
# 重定向-3xx
HTTP_300_MULTIPLE_CHOICES = 300  # 请求的资源具有多种选择
HTTP_301_MOVED_PERMANENTLY = 301  # 已为所请求的资源分配了一个新的永久URI；永久移动
HTTP_302_FOUND = 302  # 请求的网页被转移到一个新的地址，但客户访问仍继续通过原始URL地址，重定向，新的URL会在response中的Location中返回，浏览器将会使用新的URL发出新的Request。
HTTP_303_SEE_OTHER = 303  # 可以在不同的URI下找到对请求的响应，并且应该使用该资源上的GET方法检索。
HTTP_304_NOT_MODIFIED = 304  # 如果客户端已执行条件GET请求并允许访问，但文档尚未修改，则服务器应该响应此状态代码。
HTTP_305_USE_PROXY = 305  # 使用代理。必须通过Location字段给出的代理访问所请求的资源。
HTTP_306_RESERVED = 306  # 306状态代码在规范的先前版本中使用，不再使用，并且代码被保留。
HTTP_307_TEMPORARY_REDIRECT = 307  # 临时重定向。请求的资源暂时驻留在不同的URI下。
# 客户端错误-4xx
HTTP_400_BAD_REQUEST = 400  # 错误请求。由于语法格式错误，服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。
HTTP_401_UNAUTHORIZED = 401  # 未经授权。该请求需要用户身份验证。
HTTP_402_PAYMENT_REQUIRED = 402  # 此代码保留供将来使用。
HTTP_403_FORBIDDEN = 403  # 服务器理解请求，但拒绝履行请求。
HTTP_404_NOT_FOUND = 404  # 服务器未找到与Request-URI匹配的任何内容。
HTTP_405_METHOD_NOT_ALLOWED = 405  # 客户端请求中的方法被禁止
HTTP_406_NOT_ACCEPTABLE = 406  # 服务器无法根据客户端请求的内容特性完成请求
HTTP_407_PROXY_AUTHENTICATION_REQUIRED = 407  # 此代码类似于401（未授权），但表示客户端必须首先使用代理进行身份验证。
HTTP_408_REQUEST_TIMEOUT = 408  # 请求超时。客户端在服务器准备等待的时间内没有产生请求。
HTTP_409_CONFLICT = 409  # 由于与资源的当前状态冲突，无法完成请求。
HTTP_410_GONE = 410  # 请求的资源在服务器上不再可用，并且不知道转发地址。预计这种情况将被视为永久性的。网站设计人员可通过301代码指定资源的新位置
HTTP_411_LENGTH_REQUIRED = 411  # 服务器无法处理客户端发送的不带Content-Length的请求信息
HTTP_412_PRECONDITION_FAILED = 412  # 在服务器上测试时，一个或多个请求标头字段中给出的前提条件被评估为false。
HTTP_413_REQUEST_ENTITY_TOO_LARGE = 413  # 服务器拒绝处理请求，因为请求实体大于服务器能够处理的请求实体。
HTTP_414_REQUEST_URI_TOO_LONG = 414  # 请求的资源URL长于服务器允许的长度
HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415  # 服务器无法处理请求附带的媒体格式
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE = 416  # 客户端请求的范围无效
HTTP_417_EXPECTATION_FAILED = 417  # 服务器不满足请求Expect头字段指定的期望值，如果是代理服务器，可能是下一级服务器不能满足请求长。
HTTP_422_UNPROCESSABLE_ENTITY = 422  # 不可处理的请求实体。请求格式正确，但是由于含有语义错误，无法响应。
HTTP_423_LOCKED = 423  # 锁定；当前资源被锁定。
HTTP_424_FAILED_DEPENDENCY = 424  # 错误接洽关系。由于之前的某个请求发生的错误，导致当前请求失败，例如 PROPPATCH。
HTTP_428_PRECONDITION_REQUIRED = 428  # 要求先决条件；先决条件是客户端发送 HTTP 请求时，如果想要请求能成功必须满足一些预设的条件。
HTTP_429_TOO_MANY_REQUESTS = 429  # 请求过多。
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431  # 请求头字段太大
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451  # 因法律原因而被官方审查。
# 服务器错误-5xx
HTTP_500_INTERNAL_SERVER_ERROR = 500  # 服务器内部错误，无法完成请求
HTTP_501_NOT_IMPLEMENTED = 501  # 服务器不支持请求的功能，无法完成请求
HTTP_502_BAD_GATEWAY = 502  # 服务器在充当网关或代理时，在尝试完成请求时从其访问的上游服务器收到无效响应。
HTTP_503_SERVICE_UNAVAILABLE = 503  # 服务不可用；由于服务器的临时过载或维护，服务器当前无法处理请求。一般为暂时性的。
HTTP_504_GATEWAY_TIMEOUT = 504  # 作为网关或代理服务器，服务器没有收到来自URI指定的上游服务器的及时响应（例如HTTP，FTP，LDAP）或尝试完成时需要访问的其他辅助服务器（例如DNS）请求。
HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505  # 服务器不支持或拒绝支持请求消息中使用的HTTP协议版本。
HTTP_507_INSUFFICIENT_STORAGE = 507  # 存储空间不足
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511  # 网络认证请求；如果你频繁使用笔记本和智能手机，你可能会注意到大量的公用 WIFI 服务要求你必须接受一些协议或者必须登录后才能使用。
